//  尾递归的优化
//代码是一个阶乘函数，计算n的阶乘，最多需要保存n个调用记录，复杂度 O(n)
function factorial(n) {
    if (n === 1) return 1;
    return n * factorial(n - 1);
  }
  
  factorial(5) // 120

  //如果改写成尾递归，只保留一个调用记录，复杂度 O(1) 
  function factorial(n, total) {
    if (n === 1) return total;
    return factorial(n - 1, n * total);
  }
  
  factorial(5, 1) // 120